#!/bin/bash

# 药品管理系统部署脚本
# 使用方法: ./deploy.sh [production|staging]

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查环境
ENVIRONMENT=${1:-production}
log_info "开始部署到 $ENVIRONMENT 环境"

# 检查必要工具
check_requirements() {
    log_info "检查部署环境..."
    
    # 检查 Node.js
    if ! command -v node &> /dev/null; then
        log_error "Node.js 未安装"
        exit 1
    fi
    
    # 检查 npm
    if ! command -v npm &> /dev/null; then
        log_error "npm 未安装"
        exit 1
    fi
    
    # 检查 PM2
    if ! command -v pm2 &> /dev/null; then
        log_warning "PM2 未安装，正在安装..."
        npm install -g pm2
    fi
    
    log_success "环境检查完成"
}

# 构建前端
build_frontend() {
    log_info "构建前端应用..."
    cd front/h5-yaopin
    
    # 安装依赖
    npm install
    
    # 构建生产版本
    npm run build
    
    # 复制构建文件到后端
    mkdir -p ../../back/public
    cp -r dist/* ../../back/public/
    
    cd ../..
    log_success "前端构建完成"
}

# 部署后端
deploy_backend() {
    log_info "部署后端应用..."
    cd back
    
    # 安装依赖
    npm install
    
    # 检查环境变量文件
    if [ ! -f .env.production ]; then
        log_warning "未找到 .env.production 文件，请复制 env.production.example 并配置"
        cp env.production.example .env.production
        log_error "请编辑 .env.production 文件并重新运行部署脚本"
        exit 1
    fi
    
    # 创建日志目录
    mkdir -p logs
    
    # 停止现有服务
    pm2 stop yaopin-backend 2>/dev/null || true
    pm2 delete yaopin-backend 2>/dev/null || true
    
    # 启动服务
    pm2 start ecosystem.config.js
    
    # 保存 PM2 配置
    pm2 save
    
    # 设置开机自启
    pm2 startup
    
    cd ..
    log_success "后端部署完成"
}

# 健康检查
health_check() {
    log_info "执行健康检查..."
    
    # 等待服务启动
    sleep 5
    
    # 检查服务状态
    if curl -f http://localhost:3000/health > /dev/null 2>&1; then
        log_success "服务健康检查通过"
    else
        log_error "服务健康检查失败"
        exit 1
    fi
}

# 显示部署信息
show_deployment_info() {
    log_success "部署完成！"
    echo ""
    echo "📋 部署信息:"
    echo "   🌍 环境: $ENVIRONMENT"
    echo "   🚀 服务地址: http://localhost:3000"
    echo "   📊 PM2 状态: pm2 status"
    echo "   📝 查看日志: pm2 logs yaopin-backend"
    echo "   🔄 重启服务: pm2 restart yaopin-backend"
    echo "   ⏹️  停止服务: pm2 stop yaopin-backend"
    echo ""
    echo "🔧 常用命令:"
    echo "   pm2 monit          # 监控面板"
    echo "   pm2 logs           # 查看所有日志"
    echo "   pm2 reload all     # 零停机重启"
    echo ""
}

# 主函数
main() {
    log_info "开始部署药品管理系统..."
    
    check_requirements
    build_frontend
    deploy_backend
    health_check
    show_deployment_info
}

# 执行主函数
main "$@" 